/**
 * 
 */
package co.com.sed.model.peers;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import co.com.sed.model.beans.EvaluacionEVC;
import co.com.sed.model.beans.SubCompetencia;
import co.com.sed.model.beans.ResultadoEVCSubcomp;
import co.com.sed.model.util.Util;

/**
 * @author Mejia
 *
 */
public class ResultadoEVCSubcompPeer {

	private static final String BUSCAR_RESULTADOSEVCSUBCOMP =
		"SELECT id_resul_evc_subcomp, resultado_evc_subcomp, evaluacion_evc, sub_competencia FROM resultado_evc_subcomp";

	private static final String BUSCAR_RESULTADOEVCSUBCOMP  =	
		"SELECT id_resul_evc_subcomp, resultado_evc_subcomp, evaluacion_evc, sub_competencia FROM resultado_evc_subcomp"+
		"WHERE id_resul_evc_subcomp = &id_resul_evc_subcomp";

	private static final String INSERTAR_RESULTADOEVCSUBCOMP  =
		"INSERT INTO resultado_evc_subcomp( resultado_evc_subcomp, evaluacion_evc, sub_competencia ) VALUES "+
		"(resultado_evc_subcomp, evaluacion_evc, sub_competencia )";

	private static final String ACTUALIZAR_RESULTADOEVCSUBCOMP =
		"UPDATE resultado_evc_subcomp "+
		"SET resultado_evc_subcomp = &resultado_evc_subcomp , evaluacion_evc = &evaluacion_evc , sub_competencia = '&sub_competencia'"+
		"WHERE id_resul_evc_subcomp = &id_resul_evc_subcomp";

	private static final String ELIMINAR_RESULTADOEVCSUBCOMP =
		"DELETE FROM resultado_evc_subcomp "+
		"WHERE id_resul_evc_subcomp = &id_resul_evc_subcomp";

	
		
	/** busca en la base de datos todos los registros de la tabla "resultado_evc_subcomp"
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
	* 
	* @return					lista de resultado_evc_subcomp
	* @see         				ResultadoEVCSubcomp, Statement
	*/
	public static ArrayList<ResultadoEVCSubcomp> searchAllResultadoEVCSubcomp(Statement stmt, String keyword) {
		ArrayList<ResultadoEVCSubcomp> resultado_evc_subcomps = new ArrayList<ResultadoEVCSubcomp>();

		String sql = BUSCAR_RESULTADOSEVCSUBCOMP; //"SELECT id_resul_evc_subcomp, resultado_evc_subcomp, evaluacion_evc,subcompetencia FROM resultado_evc_subcomp ";

		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				while (rs.next()) {
					ResultadoEVCSubcomp rdoevcsubc = new ResultadoEVCSubcomp();

					rdoevcsubc.setIdResultadoEVCSubcomp(rs.getInt("id_resul_evc_subcomp"));
					rdoevcsubc.setResultadoEVCSubcomp(rs.getFloat("resultado_evc_subcomp"));
					rdoevcsubc.setEvaluacionEVC(new EvaluacionEVC(rs.getInt("evaluacion_evc")));
					rdoevcsubc.setSubCompetencia (new SubCompetencia (rs.getInt("sub_competencia")));
					
					
					
					resultado_evc_subcomps.add(rdoevcsubc);
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:"
					+ e.getMessage());
			e.printStackTrace();
		}

		return resultado_evc_subcomps;
	}
	
	/** busca en la base de datos un registro de la tabla "resultado_evc_subcomp"
	* 
	* @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
	* @param idResultadoEVCSubcomp		    id de la resultado_evc_subcomp que se desea cosultar
	* 
	* @return					resultado_evc_subcomp buscada
	* @see         				ResultadoEVCSubcomp, Statement
	*/
	public static ResultadoEVCSubcomp searchResultadoEVCSubcomp(Statement stmt, int idResultadoEVCSubcomp) {
		ResultadoEVCSubcomp resultado_evc_subcomp = new ResultadoEVCSubcomp();

		String sql = BUSCAR_RESULTADOEVCSUBCOMP;
		//"SELECT id_resul_evc_subcomp, subcompetencia, rango FROM resultado_evc_subcomp "+
		//"WHERE id_resul_evc_subcomp = &id_resul_evc_subcomp";
		
		
		// se setean los "parametros"
		sql = sql.replaceAll("&id_resul_evc_subcomp", String.valueOf(idResultadoEVCSubcomp));
		
		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				if (rs.next()) {
									
					resultado_evc_subcomp.setIdResultadoEVCSubcomp(rs.getInt("id_resul_evc_subcomp"));
					resultado_evc_subcomp.setResultadoEVCSubcomp(rs.getFloat("resultado_evc_subcomp"));
					resultado_evc_subcomp.setEvaluacionEVC(new EvaluacionEVC(rs.getInt("evaluacion_evc")));
					resultado_evc_subcomp.setSubCompetencia (new SubCompetencia (rs.getInt("sub_competencia")));
										
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:" + e.getMessage());
			e.printStackTrace();
		}

		return resultado_evc_subcomp;
	}
	
	/** Inserta una ResultadoEVCSubcomp en la base de datos
	 * 
	 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	 * @param resultado_evc_subcomp		resultado_evc_subcomp que se va a insertar en la base de datos
	 *  
	 * @return					void
	 * @throws SQLException		si ocurre un error al insertar el registro en la base de datos
	 * 
	 * @see         			DataManager
	 */
	public static int insertarResultadoEVCSubcomp(Statement stmt, ResultadoEVCSubcomp resultado_evc_subcomp) throws SQLException {
		int idNuevaResultadoEVCSubcomp = -1;
		ResultSet rs = null;
		
		try {
			String sql = INSERTAR_RESULTADOEVCSUBCOMP;
			 //se setean los "parametros": &id_calificacion, &cualitativa, &cuantitativa, &descripcion 
			sql = sql.replaceAll("&resultado_evc_subcomp", "" + resultado_evc_subcomp.getResultadoEVCSubcomp())
					 .replaceAll("&evaluacion_evc", "" + resultado_evc_subcomp.getEvaluacionEVC())
			         .replaceAll("&sub_competencia", "" + resultado_evc_subcomp.getSubCompetencia());
			
			stmt.executeUpdate(sql,Statement.RETURN_GENERATED_KEYS);
			
			rs = stmt.getGeneratedKeys();
			if (rs.next()) {
				idNuevaResultadoEVCSubcomp = rs.getInt("id_resul_evc_subcomp");
				Util.print("nuevo registro: " + idNuevaResultadoEVCSubcomp);
			}
		} finally {
			rs.close();
		}
		
		return idNuevaResultadoEVCSubcomp;
	}
	

	/** Actualiza una resultado_evc_subcomp en la base de datos
	 * 
	 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	 * @param resultado_evc_subcomp			resultado_evc_subcomp que se va a actualizar en la base de datos
	 * 
	 * @return					void
	 * @throws SQLException		si ocurre un error al actualizar el registro en la base de datos
	 * 
	 * @see         			DataManager
	 */
	public static void actualizarResultadoEVCSubcomp(Statement stmt, ResultadoEVCSubcomp resultado_evc_subcomp) throws SQLException {
		String sql = ACTUALIZAR_RESULTADOEVCSUBCOMP;
		 //se setean los "parametros": &id_resul_evc_subcomp, &subcompetencia
		sql = sql.replaceAll("&id_resul_evc_subcomp", "" + resultado_evc_subcomp.getIdResultadoEVCSubcomp())
				 .replaceAll("&resultado_evc_subcomp", "" + resultado_evc_subcomp.getResultadoEVCSubcomp())
				 .replaceAll("&evaluacion_evc", "" + resultado_evc_subcomp.getEvaluacionEVC())
		         .replaceAll("&sub_competencia", "" + resultado_evc_subcomp.getSubCompetencia());
		
		stmt.executeUpdate(sql);
	}
	
	/** Elimina un Resultado_evc_subcomp en la base de datos
	 * 
	 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
	 * @param Resultado_evc_subcomp				resultado_evc_subcomp que se va a eliminar en la base de datos
	 * 
	 * @return					void
	 * @throws SQLException		si ocurre un error al eliminar el registro en la base de datos
	 * 
	 * @see         			DataManager
	 */
	
	public static void eliminarResultadoEVCSubcomp(Statement stmt, ResultadoEVCSubcomp resultado_evc_subcomp) throws SQLException {
		String sql = ELIMINAR_RESULTADOEVCSUBCOMP;
		// se setean los "id_resul_evc_subcomp = &id_resul_evc_subcomp";
		sql = sql.replaceAll("&id_resul_evc_subcomp", "" + resultado_evc_subcomp.getIdResultadoEVCSubcomp());

		stmt.executeUpdate(sql);
	}
	
}
